【LeetCode 31】Merge Intervals 合并区间


“The Linux philosophy is “Laugh in the face of danger”.Oops.Wrong One. “Do it yourself”. Yes, that”s it.”
Linux的哲学就是“在危险面前放声大笑”,呵呵,不是这句,应该是“一切靠自己,自力更生”才对。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
* 给出一个区间的集合,请合并所有重叠的区间。
* 示例 1:
* 输入: [[1,3],[2,6],[8,10],[15,18]]
* 输出: [[1,6],[8,10],[15,18]]
* 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
* 示例 2:
* 输入: [[1,4],[4,5]]
* 输出: [[1,5]]
* 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
*
* 按照左边界排序,然后两两合并
*/
public class leetcode56 {
public static class Interval {
int start;
int end;

Interval() {
start = 0;
end = 0;
}

Interval(int s, int e) {
start = s;
end = e;
}
}

public List<Interval> merge(List<Interval> intervals) {
Collections.sort(intervals, new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
return Integer.compare(o1.start, o2.start);
}
});
List<Interval> res = new ArrayList<>();
for (int i = 1; i < intervals.size(); i++) {
Interval left = intervals.get(i - 1);
Interval right = intervals.get(i);
Interval mergeInterval = new Interval();
if (right.start <= left.end) {
mergeInterval = new Interval(left.start, Math.max(left.end, right.end));
intervals.set(i,mergeInterval);
} else
res.add(intervals.get(i - 1));
}
res.add(intervals.get(intervals.size() - 1));
return res;
}
}
Thanks!